#include <iostream>
#define MAXSIZE 10
using namespace std;

int g[MAXSIZE][MAXSIZE];
int Max = 0;
int cnt = 0;
int n,k;
int a[MAXSIZE];
bool is_can_put(int l,int i,int put){
	if( g[l][i]==1 ){
		for(int j=0; j<put; j++ )
			if( i == a[j] ) return false;
		return true;
	}else return false;
}
void bfs(int l,int put,bool tag){
	if( put==k && tag==false ){
		cnt++;
		if( cnt>Max ){
			Max = cnt;
		}	
		return;
	}
	if( l>n-1 ) return;
	if( tag==false ){
		a[put] = -1;
		if( put<k ) bfs(l+1,put,true);
		bfs(l+1,put,false);
	}else{
		for(int i=0; i<n; i++){
			if( is_can_put(l,i,put) ){
				a[put] = i; 
				if( put<k ) bfs(l+1,put+1,true);
				bfs(l+1,put+1,false);
			}
		}
	}
}
int main(){
	freopen("in.txt","r",stdin);
	while( true ){
		cin >> n >> k;
		if( n==-1 && k==-1 ) break;
		for(int i=0; i<n; i++)
			for(int j=0 ;j<n; j++){
				char c;
				cin >> c;
				if( c=='.' ) g[i][j] = 0;
				else g[i][j] = 1;
			}
		bfs(0,0,true);
		bfs(0,0,false);
		cout << Max << endl;
		cnt = 0;
		Max = 0;
		for(int i=0; i<MAXSIZE; i++)
			for(int j=0; j<MAXSIZE; j++)
				g[i][j] = 0;
	}
	return 0;
}
